Passed
Push — master ( 1af5bf...eabd18 )
by thomas
05:56
created

request_builder.test.js ➔ ... ➔ it(ꞌsets an outputꞌ)   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
nc 1
dl 0
loc 25
rs 8.8571
nop 1
1
/* jshint -W101, -W098 */
2
3
var bip70 = require('../main.js');
4
var assert = require('assert');
5
var RequestBuilder = bip70.RequestBuilder;
6
var ProtoBuf = bip70.ProtoBuf;
7
var PaymentDetails = ProtoBuf.PaymentDetails;
8
9
var encodeAndDecode = function(details) {
10
    return PaymentDetails.decode(PaymentDetails.encode(details).finish());
11
};
12
13
describe('RequestBuilder setters', function() {
14
    it('sets the network and time', function(cb) {
15
        var network = "main";
16
        var now = new Date().getTime();
17
        var builder = new RequestBuilder();
18
        builder.setNetwork(network);
19
        builder.setTime(now);
20
21
        var test = function(builder) {
22
            assert.equal(builder.network, network);
23
            assert.equal(builder.time, now);
24
        };
25
26
        test(builder);
27
        test(encodeAndDecode(builder));
28
        cb();
29
    });
30
31
    it('sets the memo', function(cb) {
32
        var memo = "thanks from btc.com";
33
        var now = new Date().getTime();
34
        var builder = new RequestBuilder();
35
        builder.setMemo(memo);
36
        builder.setTime(now);
37
38
        var test = function(builder) {
39
            assert.equal(builder.memo, memo);
40
        };
41
42
        test(builder);
43
        test(encodeAndDecode(builder));
44
        cb();
45
    });
46
47
    it('sets the expire time', function(cb) {
48
        var now = new Date().getTime();
49
        var expireTime = new Date().getTime();
50
        var builder = new RequestBuilder();
51
        builder.setExpires(expireTime);
52
        builder.setTime(now);
53
54
        var test = function(builder) {
55
            assert.equal(builder.expires, expireTime);
56
        };
57
58
        test(builder);
59
        test(encodeAndDecode(builder));
60
        cb();
61
    });
62
63
    it('sets the payment url', function(cb) {
64
        var paymentUrl = "https://webstore.com/payments?id=correcthorsebatterystaple-ie-random";
65
        var builder = new RequestBuilder();
66
        builder.setPaymentUrl(paymentUrl);
67
        builder.setTime(new Date().getTime());
68
69
        var test = function(builder) {
70
            assert.equal(builder.paymentUrl, paymentUrl);
71
        };
72
73
        test(builder);
74
        test(encodeAndDecode(builder));
75
        cb();
76
    });
77
78
    it('sets merchant data', function(cb) {
79
        var merchantData = new Buffer("4cf6403a-b5a3-11e7-abc4-cec278b6b50a");
80
        var builder = new RequestBuilder();
81
        builder.setMerchantData(merchantData);
82
        builder.setTime(new Date().getTime());
83
84
        var test = function(builder) {
85
            var m = Buffer.from(builder.merchantData);
86
            assert.equal(m.toString('hex'), merchantData.toString('hex'));
87
        };
88
89
        test(builder);
90
        test(encodeAndDecode(builder));
91
        cb();
92
    });
93
94
    it('sets an output', function(cb) {
95
        var txOut = {
96
            amount: 1,
97
            script: Buffer.from('42', 'hex')
98
        };
99
100
        var builder = new RequestBuilder();
101
        builder.addOutput(txOut);
102
        builder.setTime(new Date().getTime());
103
104
        var test = function(builder) {
105
            assert.equal(1, builder.outputs.length);
106
107
            var out = builder.outputs[0];
108
            assert.equal(out.amount, txOut.amount);
109
110
            var outScript = Buffer.from(out.script);
111
            assert.equal(outScript.toString('hex'), txOut.script.toString('hex'));
112
        };
113
114
        test(builder);
115
        test(encodeAndDecode(builder));
116
117
        cb();
118
    });
119
120
    it('sets outputs', function(cb) {
121
        var txOut1 = {
122
            amount: 1,
123
            script: Buffer.from('', 'hex')
124
        };
125
        var txOut2 = {
126
            amount: 1,
127
            script: Buffer.from('', 'hex')
128
        };
129
        var builder = new RequestBuilder();
130
        builder.setOutputs([txOut1, txOut2]);
131
        builder.setTime(new Date().getTime());
132
133
        var test = function(builder) {
134
            assert.equal(2, builder.outputs.length);
135
            assert.equal(builder.outputs[0].amount, txOut1.amount);
136
            assert.equal(builder.outputs[0].script.toString('hex'), txOut1.script.toString('hex'));
137
138
            assert.equal(builder.outputs[1].amount, txOut2.amount);
139
            assert.equal(builder.outputs[1].script.toString('hex'), txOut2.script.toString('hex'));
140
        };
141
142
        test(builder);
143
        test(encodeAndDecode(builder));
144
145
        cb();
146
    });
147
148
    it('builds PaymentDetails', function(cb) {
149
        var time = new Date().getTime();
150
151
        // obviously invalid script, shout out p2pool ;)
152
        var txOut = {
153
            amount: 1,
154
            script: Buffer.from('ascii')
155
        };
156
        var network = "main";
157
158
        var builder = new RequestBuilder();
159
        builder.setTime(time);
160
        builder.setNetwork(network);
161
        builder.addOutput(txOut);
162
163
        var test = function(builder) {
164
            assert.equal(builder.time, time);
165
            assert.equal(builder.network, network);
166
            assert.equal(builder.outputs[0].amount, txOut.amount);
167
168
            var script = Buffer.from(builder.outputs[0].script);
169
            assert.equal(script.toString('binary'), txOut.script.toString('binary'));
170
        };
171
172
        test(builder);
173
        test(builder.buildDetails());
174
        test(encodeAndDecode(builder));
175
176
        cb();
177
    });
178
179
    it('builds PaymentRequest', function(cb) {
180
        var time = new Date().getTime();
181
182
        // obviously invalid script, shout out p2pool ;)
183
        var txOut = {
184
            amount: 1,
185
            script: Buffer.from('ascii')
186
        };
187
        var network = "main";
188
189
        var builder = new RequestBuilder();
190
        builder.setTime(time);
191
        builder.setNetwork(network);
192
        builder.addOutput(txOut);
193
194
        var encodedDetails = ProtoBuf.PaymentDetails.encode(builder.buildDetails()).finish();
195
        var request = builder.buildRequest();
196
197
        assert.equal(request.serialized_payment_details.toString('hex'), encodedDetails.toString('hex'));
198
199
        cb();
200
    });
201
});
202